import pandas as pd
import os
# 读取原始 CSV 文件
input_file = "2020年.csv"
year=2020
data = pd.read_csv(input_file)

# 读取地理位置数据 CSV 文件
geo_file = "地理位置.csv"
geo_data = pd.read_csv(geo_file)

# 生成新的文件名，原文件名 + 'new'
output_file = os.path.splitext(input_file)[0] + 'new.csv'

# 假设数据包含“县(市、区、旗)”，“乡(镇)”，“行政村”这些列
# 根据实际列名修改以下列名
# 假设列名为: '县', '乡', '行政村'，你可以根据实际列名修改
# 如果文件中有列名，pandas会自动读取它们，否则可以手动指定列名

# 按照县、乡和行政村进行分组，并统计每组的出现次数
grouped_data = data.groupby(['县(市、区、旗)', '乡(镇)', '行政村']).size().reset_index(name='总人数')


# 假设这些列是你需要计算平均值的列
columns_to_average = [
    '工资性收入', '公益性岗位收入', '其他工资性收入', '财产性收入(合计)', '转移性收入',
    '最低生活保障金', '特困人员救助供养金', '养老金或离退休金', '计划生育金', '生态补偿金',
    '产业奖励', '就业奖励', '其他转移性收入', '生产经营性收入(合计)', '生产经营性支出',
    '生产经营性支出(合计)', '专项用于减少生产经营性支出的补贴', '年收入', '纯收入',
    '人均纯收入'
]

# 按照 '县', '乡', '行政村' 进行分组并计算每列的平均值
grouped_data = data.groupby(['县(市、区、旗)', '乡(镇)', '行政村'])[columns_to_average].agg('mean').reset_index()
#计算每个村总人数
total_population = data.groupby(['县(市、区、旗)', '乡(镇)', '行政村']).size().reset_index(name='总人数')


# 统计致贫原因出现的次数
poverty_causes = [
    '其他', '因丧', '因婚', '因学', '因残', '因灾', '因病', '缺劳力', '缺土地', '缺技术',
    '缺水', '缺资金', '自身发展动力不足'
]
# 将总人数与计算的平均值数据合并
final_data = pd.merge(grouped_data, total_population, on=['县(市、区、旗)', '乡(镇)', '行政村'], how='left')

# 为每个致贫原因添加统计列
for cause in poverty_causes:
    # 统计每个致贫原因在每个“县”，“乡”，“行政村”组合中的出现次数
    poverty_cause_count = data[data['致贫原因1'] == cause].groupby(['县(市、区、旗)', '乡(镇)', '行政村']).size().reset_index(name=cause)
    # 合并统计结果到 final_data
    final_data = pd.merge(final_data, poverty_cause_count, on=['县(市、区、旗)', '乡(镇)', '行政村'], how='left')

# 填充缺失的致贫原因次数为 0
final_data.fillna({cause : 0 for cause in poverty_causes}, inplace=True)

# 确保所有“次数”列是整数类型
for cause in poverty_causes:
    final_data[cause ] = final_data[cause ].astype(int)

# 添加“年份”列，所有行的值为 2024
final_data.insert(0, '年份', year)

# 合并地理位置数据，依据省,市,县,乡(镇),村进行合并
final_data_with_geo = pd.merge(final_data, geo_data, how='inner',
                               left_on=['县(市、区、旗)', '乡(镇)', '行政村'],
                               right_on=[ '县', '乡(镇)', '村'])

# 选择最终的列（可以删除重复的列）
final_data_with_geo = final_data_with_geo[['年份', '县(市、区、旗)', '乡(镇)', '行政村', '总人数'] + columns_to_average +
                                           [cause  for cause in poverty_causes] + ['经度', '纬度']]

# 保存处理后的数据到新的 CSV 文件
final_data_with_geo.to_csv(output_file, index=False)

print(str(year)+"年数据已处理完毕")
